package ru.mirent.url;

import java.net.URI;
import java.util.function.Function;

public class UrlFormatSchemeHostPort implements Function<String, String> {
    /**
     * Значение по умолчанию для path. В некоторых случаях требуется в конце URL добавить '/', а в других указать
     * пустое значение.
     */
    private final String defaultPath;

    public UrlFormatSchemeHostPort(String defaultPath) {
        this.defaultPath = defaultPath;
    }

    public UrlFormatSchemeHostPort() {
        this("/");
    }

    /**
     * Получение URL по схеме: [scheme:][][:port], порт необязателен.
     * @param url URL с [path] и [queryParams]
     * @return URL согласно схемы
     */
    @Override
    public String apply(String url) {
        StringBuilder result = new StringBuilder();
        URI uri = new UrlCheck().apply(url);
        result
                .append(uri.getScheme())
                .append("://")
                .append(uri.getHost());
        if (uri.getPort() != -1) {
            result
                    .append(":")
                    .append(uri.getPort());
        }
        result.append(defaultPath);

        return result.toString();
    }
}
